package 传智播客_黑马.java基础.OverLoading重载;


public class OverLoading {
    /*
    重载实验:
        在java中,同一个类中的多个方法可以有相同的方法名称,但是有
        不同的形参列表,这就叫方法重载.
        重载的规则:
            形参列表不同:(个数不同,顺序不同,类型不同)满足其中之一即可
            仅仅参数变量名称不同是不可以的
            跟成员方法一样,构造方法也可以重载
            声明为final的方法不可以被重载
            声明为static的方法不能被重载,
        注意:
            方法名称必须相同
            参数列表必须不同
            方法的返回值类型可以相同,也可以不同
            仅仅返回类型不同不足以成为方法的重载
        方法重载的实现:
            方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去逐个匹配,
            以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨.
     */

    /*
    重载实验
     */

    //形参列表不同:(个数不同,顺序不同,类型不同)
    //1个数不同
    public void OverLoad(){
        System.out.println("这是无参方法");
    }

    public void OverLoad(int a){
        System.out.println("这是一个int型参数的方法");
    }

    public void OverLoad(int a,int b){
        System.out.println("这是两个int型参数的方法");
    }

//    public void OverLoad(int b,int a){
//        System.out.println("这是两个int型参数的方法");
//    }

    //2顺序不同
    public int OverLoad(int a,float b){
        System.out.println("这是一个int型,一个float型参数的方法");
        return 6;
    }

    public int OverLoad(float b,int a){//形参名字可以相同,也可以不同
        System.out.println("这是一个float型,一个int型参数的方法");
        return 6;
    }

    //3类型不同
    public void OverLoad(String a){
        System.out.println("这是String型参数的方法");
    }

    public void OverLoad(float a){
        System.out.println("这是float型参数的方法");
    }

    public int OverLoad(char a){
        System.out.println("这是参数类型且返回值类型不同的方法");
        return 6;
    }

    //下面的代码没有报错,那么问题来了,static方法到底能不能重载.
    //比较靠谱的说法https://zhidao.baidu.com/question/122529074.html
    public static int load(int a){
        return 6;
    }
    public static float load(float b){
        return 1.0F;
    }







    /*
    以下是错误例子
     */
    //只有返回值类型不同是不可以的!
//    public void OverLoad(){
//        System.out.println("这是无参方法");
//    }
//    public float OverLoad(){
//        System.out.println("这是只有返回值类型不同的方法");
//        return 1.0F;

//    }
    //只有参数名称不同也是不可以的!
//    public void OverLoad(int a){
//        System.out.println("这是一个int型参数的方法");
//    }
//    public void OverLoad(int b){
//        System.out.println("这是int型参数的方法");

//    }

    //但是不用static只能通过创建类来调用
}
